//日志系统的全局接口头文件
#ifndef __M_LEVEL_H__
#define __M_LEVEL_H__//防止头文件被重复包含

namespace bitlog{
    class LogLevel{
        public:
        enum class value{//枚举类值
            UNKNOW = 0,
            DEBUG,//调试，调试时的关键信息输出
            INFO,//提⽰，普通的提⽰型⽇志信息
            WARN,//警告，不影响运⾏，但是需要注意⼀下的⽇志
            ERROR,//错误，程序运⾏出现错误的⽇志
            FATAL,//致命，⼀般是代码异常导致程序⽆法继续推进运⾏的⽇志
            OFF//关闭
        };

        static const char *toString(LogLevel::value l){//LogLevel::value l 中的 l 用于表示或存储日志的级别
            switch(l){//switch(l) 根据变量 l 的值选择执行不同的代码块
                #define TOSTRING(name) #name//将宏参数 name 转换为其字符串字面量表示
                case LogLevel::value::DEBUG: return TOSTRING(DEBUG);//在匹配到日志级别为DEBUG时，返回"DEBUG"字符串。
                case LogLevel::value::INFO: return TOSTRING(INFO);//其余同理
                case LogLevel::value::WARN: return TOSTRING(WARN);
                case LogLevel::value::ERROR: return TOSTRING(ERROR);
                case LogLevel::value::FATAL: return TOSTRING(FATAL);
                case LogLevel::value::OFF: return TOSTRING(OFF);
                #undef TOSTRING// 取消（删除）TOSTRING 宏的定义
                default: return "UNKNOW";//在switch语句中表示当所有case都不匹配时，返回字符串"UNKNOW"
            }
            return "UNKNOW";
        }
    };
    //这段代码定义了一个日志级别的枚举和将日志级别转换为字符串的函数，用于在日志记录时表示不同的日志重要性
    
}
#endif//结束一个预处理指令块，通常是与 #if, #ifdef, 或 #ifndef 配对使用的
